iT邦幫忙

2022 iThome 鐵人賽

0

棄牌動作分為兩階段,第一階段為牌局第一輪是否棄牌,第二階段為牌局第二輪至第五輪的棄牌判斷。

第一階段

依據自身手牌好壞決定是否棄牌

if input[7] == 0: #第一階段
    hand1 = int(float(input[5]))
    hand2 = int(float(input[6]))
    level = BBQ.set_hands_level(hand1,hand2)
    input[7] = level
    print("level: ",level)
    if level == 5:
        if (random.randrange(1,100,1)>=35): #true / false
            output = (action_predict(input))
        else:
            output = [8,-1]
    elif level == 4 :
        if (random.randrange(1,100,1)>=25):
            output = (action_predict(input))
        else:
            output = [8,-1]
    elif level == 3 :
        if (random.randrange(1,100,1)>=20):
            output = (action_predict(input))
        else:
            output = [8,-1]
    elif level == 2 :
        if (random.randrange(1,100,1)>=10):
            output = (action_predict(input))
        else:
            output = [8,-1]
    else :
        output = (action_predict(input))
    output.append(level)
else: #第二階段
    print("----------------------------------------------第二階段")
    output = abandon(input)

第二階段

依據公共牌與手牌組合的卡片強度和對手下注模式來判斷棄牌,以高牌和一對與其他牌組做為區分,高牌情況下如果對手突然加注3倍或以上的籌碼有60%機率棄牌或是ALL-in會有85%機率棄牌;一對情況下同理,但棄牌機率會下降;其他牌組不考慮棄牌動作。

#type 0高牌 1一對 2三條 3兩對 4順子 5同花 6葫蘆 7鐵支 8同花順 9同順缺1 10同花缺1 11同花缺2 12順缺1
def abandon(input):
    output=[]
    new_input = []
    
    for i in range(0,len(input)) :
        if i <= 9:
            if i == 8 or i == 9:
                new_input.append((input[i]/input[12]))
            else:
                new_input.append(input[i])
        elif (i%3) == 1 and input[i] == -1:
            break
        elif (i%3) == 0 and input[i] != -1:
            new_input.append((input[i]/input[12]))
        else :
            new_input.append(input[i])
    
    strength = BBQ.check_strength(new_input[0:7]) #牌型判斷參數
    
    if strength==0: #高牌
        if input[9] > (input[8]+input[9])*3:
            if (random.randrange(1,100,1)>=60):
                output = (action_predict(input))
            else:
                output = [8,BBQ.bargain(input[0:7],input[8:10])]
        elif input[9]>1500: #all-in待改
            if (random.randrange(1,100,1)>=85):
                output = (action_predict(input))
            else:
                output = [8,BBQ.bargain(input[0:7],input[8:10])]
        else:
            output = (action_predict(input))
            
    elif strength==1: #一對
        if input[9] > (input[8]+input[9])*6: #6倍底池
            if (random.randrange(1,100,1)>=40):
                output = (action_predict(input))
            else:
                output = [8,BBQ.bargain(input[0:7],input[8:10])]
        elif input[9]==3000: #all-in待改
            if (random.randrange(1,100,1)>=65):
                output = (action_predict(input))
            else:
                output = [8,BBQ.bargain(input[0:7],input[8:10])]
        else:
            output = (action_predict(input))

    else: #比高牌與一對好的牌組
        output = (action_predict(input))
            
    return output

上一篇
DAY 33 修改棄牌動作 & 增加學習率
下一篇
DAY 35 刪除all-in label
系列文
關於因耍廢太久而必須挑戰5個月上研究所的廢廢38
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言